﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using Wicresoft.Common;
using Wicresoft.Framework.Organization;
using JDEduTrain.Framework.Business;
using JDEduTrain.Framework.ViewEntity;
using JDEduTrain.Framework.Entity;

using NameControlLib;

public partial class Page_UserInfoList : BaseAuthenticationPage
{

    public string SearchDefaultText
    {
        get
        {
            return "搜索 姓名";
        }
    }

    public string SearchClause
    {
        get
        {
            if (ViewState["SearchClause"] == null)
                ViewState["SearchClause"] = "1=1";
            return ViewState["SearchClause"].ToString();
        }
        set
        {
            ViewState["SearchClause"] = value;
        }
    }
    protected DataTable DTUserPageList
    {
        get
        {
            if (ViewState["DTUserPageList"] != null)
            {
                return (DataTable)ViewState["DTUserPageList"];
            }
            return new DataTable();
        }
        set
        {
            ViewState["DTUserPageList"] = value;
        }
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        this.tbSearch.Attributes.Add("onfocus", string.Format("clearText(this, '{0}');", SearchDefaultText));
        this.tbSearch.Attributes.Add("onblur", string.Format("insertText(this, '{0}');", SearchDefaultText));
        this.tbSearch.Attributes.Add("onkeydown", "searchClick();");
        this.ShowLRLayoutButton = false;
        this.ShowUDLayoutButton = false;
        this.ShowSimpleLayoutButton = false;
        this.DefaultLayout = "Simple";
        this.ShowAdvancedSearch = true;

        this.Title = "人员库";
        if (!IsPostBack)
        {
            tbSearch.Text = SearchDefaultText;
            this.Order.OrderColumn = UserExtend.SQLCOL_THIRDLEVELDEPTDISPLAYNAME;
            this.Order.OrderDirection = "DESC";
            BindData();
        }

    }

    protected override void Pager_PageChanged(object sender, EventArgs e)
    {
        BindData();
    }

    protected override void Order_OrderChanged(object sender, EventArgs e)
    {
        BindData();
    }

    private void BindData()
    {
        int recordCount = 0;
        if (OrganizationHelper.IsUserInRole(CurrentUser.ID, AppConfig.MinistryAdminRoleID))
        {
            DataTable dtUser = BLTrain.GetUserList(0, int.MaxValue, SearchClause, string.Format("{0} {1}", this.Order.OrderColumn, this.Order.OrderDirection), ref recordCount);
            DTUserPageList = dtUser.Clone();
            DTUserPageList.Clear();
            int newrecordCount = 0;

            foreach (DataRow dr in dtUser.Rows)
            {
                //按人事所在三级实体管理
                Department currMainDept = OrganizationHelper.GetDepartmentInfo(CurrentUser.MainDepartmentID);
                string deptPath = currMainDept.IDPath;
                string[] deptIDs = deptPath.Split('/');
                string mainDeptID = string.Empty;
                if (deptIDs.Length >= 4)
                {
                    mainDeptID = deptIDs[3];
                }
                else
                {
                    mainDeptID = CurrentUser.MainDepartmentID.ToString();
                }
                UserExtend userExtend = new UserExtend(new Guid(dr["ID"].ToString()));
                if (userExtend.Load())
                {
                    //取三级实体部门
                    Department dept = OrganizationHelper.GetDepartmentInfo(userExtend.MainDepartmentID);
                    if (dept != null)
                    {
                        string[] userDeptIDs = dept.IDPath.Split('/');
                        if (userDeptIDs.Length >= 4)
                        {
                            dr["ThirdLevelDeptDisplayName"] = OrganizationHelper.GetDepartmentInfo(new Guid(userDeptIDs[3])).DisplayName;
                        }
                    }
                }
                try
                {
                    dr["Birthday"] = Convert.ToDateTime(dr["Birthday"]).ToShortDateString();
                }
                catch (Exception)
                {
                }

                if (!string.IsNullOrEmpty(mainDeptID))
                {
                    if (OrganizationHelper.IsUserInDepartment(new Guid(dr["ID"].ToString()), new Guid(mainDeptID)))
                    {
                        DTUserPageList.ImportRow(dr);
                        newrecordCount++;
                    }
                }

            }
            DTUserPageList = WebCommon.GetPagedTable(DTUserPageList, Pager.PageIndex + 1, Pager.PageSize);

            Pager.RecordCount = newrecordCount;
        }
        else if (OrganizationHelper.IsUserInRole(CurrentUser.ID, AppConfig.OrganizeAdminRoleID))
        {
            DTUserPageList = BLTrain.GetUserList(Pager.PageIndex, Pager.PageSize, SearchClause, string.Format("{0} {1}", this.Order.OrderColumn, this.Order.OrderDirection), ref recordCount);
            Pager.RecordCount = recordCount;
        }
        rptUserInfo.DataSource = DTUserPageList;
        rptUserInfo.DataBind();

    }

    protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e)
    {
        BindData();
    }
    protected void btnSearch_Click(object sender, EventArgs e)
    {
        if (tbSearch.Text != string.Empty && tbSearch.Text != SearchDefaultText)
            SearchClause = string.Format("{0} LIKE N'%{1}%'", UserExtend.SQLCOL_FULLNAME, tbSearch.Text);
        else
            SearchClause = "1=1";
        BindData();
    }
    protected void btnAdvancedSearch_Click(object sender, EventArgs e)
    {
        if (tbSearchTitle.Text != string.Empty)
            SearchClause = string.Format("{0} LIKE N'%{1}%'",UserExtend.SQLCOL_FULLNAME, tbSearchTitle.Text);
        else
            SearchClause = "1=1";

        if (tbSearchDept.Text != string.Empty)
            SearchClause += string.Format("AND {0} LIKE N'%{1}%'", UserExtend.SQLCOL_THIRDLEVELDEPTDISPLAYNAME, tbSearchDept.Text);

        if (tbSearchStation.Text != string.Empty)
            SearchClause += string.Format("AND {0} LIKE N'%{1}%'", UserExtend.SQLCOL_STATION, tbSearchStation.Text);
        BindData();
       
    }
    protected void btnRefresh_Click(object sender, EventArgs e)
    {
        BindData();
    }


    protected void btnAddUser_Click(object sender, EventArgs e)
    {
        string[] userIDs = tbUserID.Text.Split(';');
        foreach (string userID in userIDs)
        {
            if (!string.IsNullOrEmpty(userID))
            {
                BLTrain.AddTrainUserById(new Guid(userID),AppConfig.TrainMemberRoleID);
            }
        }
        tbUserDisplayName.Text = "";
        tbUserID.Text = "";
        tbUserName.Text = "";
        BindData();
    }

    protected void btnDelete_Click(object sender, EventArgs e)
    {
        ArrayList alUser = new ArrayList();

        for (int i = 0; i < rptUserInfo.Items.Count; i++)
        {
            if ((rptUserInfo.Items[i].FindControl("cbUser") as CheckBox).Checked)
            {
                Guid id = new Guid(DTUserPageList.Rows[rptUserInfo.Items[i].ItemIndex]["ID"].ToString());
                alUser.Add(id);
            }
        }
        BLTrain.DeleteTrainUser((Guid[])alUser.ToArray(typeof(Guid)),AppConfig.TrainMemberRoleID);
        BindData();
    }
    protected void rptUserInfo_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Label lFullName = e.Item.FindControl("lFullName") as Label;
            
            string id = DTUserPageList.Rows[e.Item.ItemIndex]["ID"].ToString();
            NameControlLib.NameInfo userControl = new NameInfo();
            userControl.ID = "UserNameControl_" + id;
            userControl.UserID = new Guid(id);
            userControl.ScriptPath = "../Js/NameInfo.js";
            lFullName.Controls.Add(userControl);
            if (string.IsNullOrEmpty(lFullName.Text))
            {

            }
           
        }
    }

}
